package o2o.config.dao;

import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBObject;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

public interface MongoDao {
	/** 
     *  
     * 方法名：getDb 
     * 作者：Jahnke 
     * 创建时间：2016年3月9日11:17:44
     * 描述：获取指定的mongodb数据库 
     * @param dbName 
     * @return 
     */  
	public DB getDb(String dbName); 
	/** 
     *  
     * 方法名：getCollection 
     * 作者：Jahnke 
     * 创建时间：2016年3月9日11:19:01
     * 描述：获取指定mongodb数据库的collection集合 
     * @param dbName    数据库名 
     * @param collectionName    数据库集合 
     * @return 
     */  
    public DBCollection getCollection(String dbName, String collectionName); 
    /** 
     *  
     * 方法名：inSert 
     * 作者：Jahnke 
     * 创建时间：2016年3月9日11:20:14
     * 描述：向指定的数据库中添加给定的keys和相应的values 
     * @param dbName 
     * @param collectionName 
     * @param keys 
     * @param values 
     * @return 
     */  
    public boolean insert(String dbName, String collectionName, Map<String, Object> map);
    /** 
     * 方法名：delete 
     * 作者：Jahnke 
     * 创建时间：2016年3月9日11:20:18
     * 描述：删除数据库dbName中，指定keys和相应values的值 
     * @param dbName 
     * @param collectionName 
     * @param keys 
     * @param values 
     * @return 
     */  
    public boolean delete(String dbName, String collectionName, Map<String, Object> map);
    
    /** 
     *  
     * 方法名：find 
     * 作者：Jahnke 
     * 创建时间：2016年3月9日11:20:23
     * 描述：从数据库dbName中查找map中指定keys和相应values的值 
     * 可以排序  按字段orderBy  ，order:  >0 正序，<0 逆序
     * @param dbName 
     * @param collectionName 
     * @param keys 
     * @param values 
     * @param num
     * @return 
     */  
    public List<HashMap<String, Object>> find(String dbName, String collectionName, Map<String, Object> map, int num, String orderBy, int order);
    public List<HashMap<String, Object>> find(String dbName, String collectionName, Map<String, Object> map, int num);
    public List<HashMap<String, Object>> find(String dbName, String collectionName, int num, String orderBy, int order);
    public List<HashMap<String, Object>> find(String dbName, String collectionName, int num);


    /** 
     *  
     * 方法名：update 
     * 作者：Jahnke 
     * 创建时间：2016年3月9日11:20:26
     * 描述：更新数据库dbName，用指定的newValue更新oldValue 
     * @param dbName 
     * @param collectionName 
     * @param oldValue 
     * @param newValue 
     * @return 
     */  
    public boolean update(String dbName, String collectionName, DBObject oldValue, DBObject newValue);  
    /**
     * 方法名：update 
     * 作者：Jahnke 
     * 创建时间：2016年3月9日11:20:26
     * 描述：更新数据库dbName，用指定的newValue更新oldValue，若当前不存在更新的选择，可以选择是否插入。
     * @param dbName
     * @param collectionName
     * @param oldValue
     * @param newValue
     * @param upsert
     * @return
     */
    public boolean update(String dbName, String collectionName, DBObject oldValue, DBObject newValue, boolean upsert);
    /** 
     * 方法名：isExit 
     * 作者：Jahnke 
     * 创建时间：2016年3月9日11:20:31
     * 描述：判断给定的keys和相应的values在指定的dbName的collectionName集合中是否存在 
     * @param dbName 
     * @param collectionName 
     * @param keys 
     * @param values 
     * @return 
     */  
    public boolean isExit(String dbName, String collectionName, Map<String, Object> map);
}
